﻿using System;
using System.Collections.Generic;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using MSDAL;

namespace MSWeb.Implementation
{
    public static class PdfHelper
    {
        public static MemoryStream GeneratePdf(DateTime data, double wartosc, List<Lekcje> lekcjeList,
            string uczenImie, string uczenNazwisko, string nazwaFirmy, string adresFirmy,
                bool czyGotowka, int numerWplaty)
        {
            const int lewyMargines = 35;
            const int prawyMargines = 480;
            const int srodekMargines = 310;
            var lekcjeY = 720;
            var lekcje = new List<string>();
            lekcjeList.ForEach(item =>
            {
                lekcje.Add(item.Data.Value.ToShortDateString());
            });

            using (var ms = new MemoryStream())            
            using (var document = new Document(PageSize.A4, 25, 25, 30, 30))
            using (var writer = PdfWriter.GetInstance(document, ms))
            {
                document.Open();
                var cb = writer.DirectContent;
                //ustawiam sie w lewym gornym rogu
                cb.MoveTo(30, 812);
                //boki
                cb.LineTo(565, 812);
                cb.LineTo(565, 512);
                cb.LineTo(30, 512);
                cb.LineTo(30, 812);
                cb.Stroke();

                cb.MoveTo(120, 812);
                cb.LineTo(120, 752);
                cb.Stroke();

                cb.MoveTo(475, 812);
                cb.LineTo(475, 752);
                cb.Stroke();

                cb.MoveTo(475, 812);
                cb.LineTo(475, 752);
                cb.Stroke();

                cb.MoveTo(306, 752);
                cb.LineTo(306, 512);
                cb.Stroke();

                cb.MoveTo(30, 752);
                cb.LineTo(565, 752);
                cb.Stroke();

                cb.MoveTo(30, 680);
                cb.LineTo(306, 680);
                cb.Stroke();

                cb.MoveTo(30, 640);
                cb.LineTo(306, 640);
                cb.Stroke();

                cb.MoveTo(306, 560);
                cb.LineTo(565, 560);
                cb.Stroke();

                cb.BeginText();
                var font = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);
                cb.SetFontAndSize(font, 10);

                cb.SetTextMatrix(lewyMargines, 785);
                cb.ShowText("Data: " + data.ToShortDateString());

                cb.SetTextMatrix(250, 785);
                cb.ShowText("Potwierdzenie wplaty ");

                cb.SetTextMatrix(260, 765);
                cb.ShowText("Oryginal \\ Kopia");

                cb.SetTextMatrix(lewyMargines, 740);
                cb.ShowText("Dla: ");

                cb.SetTextMatrix(lewyMargines, 720);
                cb.ShowText("Dane firmy: " + nazwaFirmy);

                cb.SetTextMatrix(lewyMargines, 710);
                cb.ShowText(adresFirmy);

                cb.SetTextMatrix(lewyMargines, 660);
                cb.ShowText("Typ wplaty: ");
                cb.ShowText(czyGotowka ? "Gotowka" : "Przelew");

                cb.SetTextMatrix(lewyMargines, 620);
                cb.ShowText("Wplate przyjal: ");

                cb.SetTextMatrix(prawyMargines, 785);
                cb.ShowText("Numer: " + numerWplaty);

                cb.SetTextMatrix(srodekMargines, 740);
                cb.ShowText("Od: " + uczenImie + " " + uczenNazwisko);

                cb.SetTextMatrix(srodekMargines, lekcjeY);
                cb.ShowText("Lekcje: ");

                lekcje.ForEach(item =>
                {
                    lekcjeY -= 10;
                    cb.SetTextMatrix(srodekMargines, lekcjeY);
                    cb.ShowText(item);
                });

                cb.SetTextMatrix(srodekMargines, 550);
                cb.ShowText("Wartosc: " + wartosc + " PLN");

                cb.EndText();
                document.Close();
                writer.Close();
                ms.Close();

                return ms;
                //Response.ContentType = "pdf/application";
                //Response.AddHeader("content-disposition", "attachment;filename=First_PDF_document.pdf");
                //Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
            }            
        }
    }
}